package com.lxx.common;
//
import java.util.List;
import java.util.Map;

//
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.lxx.utils.Pagination;
//
//import com.github.pagehelper.Page;
//import com.github.pagehelper.PageHelper;
//import com.google.common.collect.ImmutableMap;
//import com.zcsy.util.Constant;
//import com.zcsy.util.Datagrid;
//import com.zcsy.util.Result;
//
/**
 * @author linxinxing
 *
 * @param <T> 实体类型
 * @param <K> 主键类型
 * @param <M> DAO类型
 */
public abstract class BaseServiceImpl<T, K, M extends BaseDao<T, K>> implements BaseService<T, K>{
	private static final Logger LOGGER = LoggerFactory.getLogger(BaseServiceImpl.class);
//	
	@Autowired
	public M baseMapper;
//	
	/**
	 * 条件分页查询
	 * 
	 * @param params 条件参数
	 * @param page 第几行
	 * @param rows 每行几条
	 * @return 符合条件的列表
	 */
	public Pagination<T> query(Map<String, Object> params, int pageIndex, int pageSize){
		Pagination<T> page = new Pagination<T>();
		Page<?> total = PageHelper.startPage(pageIndex, pageSize);
		List<T> list = baseMapper.query(params);
		page.setDatas(list);
		page.setPageIndex(pageIndex);
		page.setPageSize(pageSize);
		page.setTotalRow((int)total.getTotal());
		return page;
	}
//	
	/**
	 * 更新 
	 * 
	 * @param t 对象
	 * @return 影响的记录数
	 */
	public int update(T t){
		return baseMapper.updateByPrimaryKeySelective(t);
	}
//	
	/**
	 * 批量删除 车辆信息
	 * 
	 * @param ids 车辆信息的主键列表，用英文逗号,隔开
	 * @return 影响的记录数
	 */
	public int delete(String ids){
		int ret = 0;
		for (String idStr : ids.split(",")) {
			T t = baseMapper.selectByPrimaryKey(convertId(idStr));
			ret += delete(t);
		}
		return ret;
	}
//	
	/**
	 * 将一个字符串转化为主键类型
	 * @param idStr
	 * @return
	 */
	public abstract K convertId(String idStr);
	
	/**
	 * 定义删除操作，物理删除或是逻辑删除
	 * @param t
	 * @return
	 */
	public abstract int delete(T t);
//
	/**
	 * 保存 车辆信息
	 * 
	 * @param vehicleInfo 车辆信息对象
	 * @return 影响的记录数
	 */
	public int save(T t){
		return baseMapper.insertSelective(t);
	}
//	
	/**
	 * 详情
	 * 
	 * @param id
	 * @return
	 */
	public T detail(K id){
		return baseMapper.selectByPrimaryKey(id);
	}
//
}
